// pages/login/login.js
const app = getApp()

Page({
  /**
   * 页面的初始数据
   */
  data: {
    agreementChecked: false,
    userInfo: null,
    hasUserInfo: false,
    showUserInfoForm: false,
    currentUserInfo: null,
    // 用户信息表单数据
    formData: {
      avatarUrl: '',
      nickName: '',
      gender: 0
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 检查是否已经登录
    if (app.globalData.hasLogin) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    }
    
    // 测试网络连接
    this.testNetworkConnection()
  },

  /**
   * 测试网络连接
   */
  testNetworkConnection() {
    console.log('测试网络连接...')
    wx.getNetworkType({
      success: (res) => {
        console.log('网络类型:', res.networkType)
        if (res.networkType === 'none') {
          wx.showToast({
            title: '网络连接异常',
            icon: 'none',
            duration: 2000
          })
        }
      },
      fail: (err) => {
        console.error('获取网络状态失败:', err)
      }
    })
  },

  /**
   * 微信授权登录
   */
  onWechatLogin() {
    console.log('点击微信授权登录按钮')
    console.log('当前协议状态:', this.data.agreementChecked)
    
    if (!this.data.agreementChecked) {
      wx.showToast({
        title: '请先同意用户协议',
        icon: 'none',
        duration: 2000
      })
      return
    }

    // 开始微信授权登录流程
    this.performWechatLogin()
  },


  /**
   * 暂不登录
   */
  onSkipLogin() {
    wx.showModal({
      title: '提示',
      content: '暂不登录将无法使用完整功能，确定要跳过吗？',
      confirmText: '确定',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          // 跳转到首页
          wx.reLaunch({
            url: '/pages/index/index'
          })
        }
      }
    })
  },

  /**
   * 切换协议同意状态
   */
  onToggleAgreement() {
    this.setData({
      agreementChecked: !this.data.agreementChecked
    })
  },

  /**
   * 查看隐私协议
   */
  onPrivacyPolicy() {
    wx.showModal({
      title: '隐私协议',
      content: '这里是助学慈善隐私协议的内容...',
      showCancel: false,
      confirmText: '我知道了'
    })
  },

  /**
   * 查看服务协议
   */
  onServiceAgreement() {
    wx.showModal({
      title: '服务协议',
      content: '这里是服务协议的内容...',
      showCancel: false,
      confirmText: '我知道了'
    })
  },


  /**
   * 执行微信登录流程
   */
  performWechatLogin() {
    console.log('开始微信登录流程')
    
    // 显示加载提示
    wx.showLoading({
      title: '登录中...',
      mask: true
    })
    
    // 使用 wx.login 获取 code
    wx.login({
      success: ({ code }) => {
        if (!code) {
          wx.hideLoading()
          wx.showToast({ 
            title: '获取登录凭证失败', 
            icon: 'none',
            duration: 2000
          })
          return
        }
        
        console.log('获取到登录code:', code)
        
        // 发送登录请求到后端 - 修改为正确的API路径和数据格式
        const loginData = { code: code }
        
        app.request({ 
          url: '/user/auth/wechat', 
          method: 'POST', 
          data: loginData 
        })
        .then((resp) => {
          console.log('登录响应:', resp)
          
          // 检查HTTP状态码和响应数据
          const responseData = resp.data || {}
          
          // 根据后端Result结构判断成功/失败 (result=true表示成功)
          if (responseData.result === true) {
            // 登录成功
            console.log('登录成功，处理响应数据...')
            const data = responseData.data || {}
            console.log('登录返回的数据:', data)
            
            // 保存token
            if (data.token) {
              console.log('保存token:', data.token)
              app.saveToken(data.token)
            }
            
            // 构建用户信息对象
            const userInfo = {
              id: data.id,
              userId: data.id,
              username: data.username || '微信用户',
              avatarUrl: data.avatarUrl || '',
              token: data.token
            }
            console.log('保存用户信息:', userInfo)
            app.saveLoginStatus(userInfo)
            this.setData({ 
              userInfo: userInfo, 
              hasUserInfo: true 
            })
            
            // 检查是否需要获取用户信息
            this.checkAndUpdateUserInfo(userInfo)
            
          } else {
            // 登录失败
            wx.hideLoading()
            this.handleLoginError(responseData.msg || '登录失败')
          }
        })
        .catch((e) => {
          wx.hideLoading()
          console.error('登录请求失败:', e)
          this.handleNetworkError(e)
        })
      },
      fail: (err) => {
        wx.hideLoading()
        console.error('wx.login 失败:', err)
        wx.showToast({ 
          title: 'wx.login 失败', 
          icon: 'none',
          duration: 2000
        })
      }
    })
  },

  /**
   * 检查并更新用户信息
   */
  checkAndUpdateUserInfo(userInfo) {
    console.log('检查用户信息完整性:', userInfo)
    // 检查用户信息是否完整（头像和昵称）
    const hasAvatar = userInfo.avatarUrl && userInfo.avatarUrl.trim() !== ''
    const hasNickname = userInfo.username && userInfo.username.trim() !== '' && userInfo.username !== '微信用户'
    
    if (!hasAvatar || !hasNickname) {
      console.log('用户信息不完整，显示用户信息完善界面')
      wx.hideLoading()
      // 显示用户信息完善界面
      this.setData({
        showUserInfoForm: true,
        currentUserInfo: userInfo,
        formData: {
          avatarUrl: userInfo.avatarUrl || '',
          nickName: userInfo.username || '',
          gender: 0
        }
      })
    } else {
      // 用户信息完整，直接跳转
      console.log('用户信息完整，直接跳转首页')
      wx.hideLoading()
      wx.showToast({ 
        title: '登录成功', 
        icon: 'success',
        duration: 1500
      })
      
      setTimeout(() => {
        wx.reLaunch({ url: '/pages/index/index' })
      }, 1500)
    }
  },

  /**
   * 选择头像
   */
  onChooseAvatar(e) {
    const { avatarUrl } = e.detail
    console.log('选择头像:', avatarUrl)
    this.setData({
      'formData.avatarUrl': avatarUrl
    })
  },

  /**
   * 昵称输入
   */
  onNicknameInput(e) {
    const { value } = e.detail
    this.setData({
      'formData.nickName': value
    })
  },

  /**
   * 性别选择
   */
  onGenderChange(e) {
    const gender = parseInt(e.detail.value)
    this.setData({
      'formData.gender': gender
    })
  },

  /**
   * 保存用户信息
   */
  onSaveUserInfo() {
    const { formData, currentUserInfo } = this.data
    
    if (!formData.avatarUrl && !formData.nickName) {
      wx.showToast({
        title: '请至少选择头像或输入昵称',
        icon: 'none'
      })
      return
    }

    wx.showLoading({
      title: '保存中...'
    })

    // 调用后端接口更新用户信息 - 根据User实体调整字段
    this.updateUserInfo({
      userId: currentUserInfo.id,
      avatarUrl: formData.avatarUrl,
      username: formData.nickName,
      gender: formData.gender
    })
  },

  /**
   * 跳过用户信息完善
   */
  onSkipUserInfo() {
    wx.showModal({
      title: '提示',
      content: '跳过后可在个人中心完善信息',
      confirmText: '确定跳过',
      cancelText: '继续完善',
      success: (res) => {
        if (res.confirm) {
          wx.reLaunch({ url: '/pages/index/index' })
        }
      }
    })
  },

  /**
   * 更新用户信息到后端
   */
  updateUserInfo(userInfo) {
    console.log('更新用户信息:', userInfo)
    
    app.request({
      url: '/user/updateUserInfo', // 注意：这个接口需要后端实现
      method: 'POST',
      data: userInfo
    })
    .then((resp) => {
      wx.hideLoading()
      console.log('更新用户信息响应:', resp)
      
      const responseData = resp.data || {}
      
      // 根据后端Result结构判断成功/失败 (result=true表示成功)
      if (responseData.result === true) {
        // 更新本地用户信息
        const updatedUserInfo = { 
          ...this.data.currentUserInfo, 
          username: userInfo.username,
          avatarUrl: userInfo.avatarUrl,
          gender: userInfo.gender
        }
        app.saveLoginStatus(updatedUserInfo)
        
        // 隐藏用户信息表单
        this.setData({ 
          showUserInfoForm: false,
          userInfo: updatedUserInfo,
          hasUserInfo: true
        })
        
        wx.showToast({ 
          title: '保存成功', 
          icon: 'success',
          duration: 1500
        })
        
        setTimeout(() => {
          wx.reLaunch({ url: '/pages/index/index' })
        }, 1500)
      } else {
        wx.showToast({
          title: responseData.msg || '保存失败',
          icon: 'none'
        })
      }
    })
    .catch((e) => {
      wx.hideLoading()
      console.error('更新用户信息失败:', e)
      wx.showToast({ 
        title: '网络错误，请重试', 
        icon: 'none'
      })
    })
  },


  /**
   * 处理登录错误
   */
  handleLoginError(errorMsg) {
    console.log('处理登录错误:', errorMsg)
    
    wx.showModal({
      title: '登录失败',
      content: errorMsg || '登录过程中出现错误，请稍后重试',
      showCancel: true,
      confirmText: '重试',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          // 用户选择重试
          setTimeout(() => this.performWechatLogin(), 1000)
        }
      }
    })
  },

  /**
   * 处理网络错误
   */
  handleNetworkError(error) {
    console.error('网络错误:', error)
    
    let errorMessage = '网络连接异常'
    
    if (error && error.errMsg) {
      if (error.errMsg.includes('timeout')) {
        errorMessage = '请求超时，请检查网络连接'
      } else if (error.errMsg.includes('fail')) {
        errorMessage = '网络请求失败，请稍后重试'
      }
    }
    
    wx.showModal({
      title: '网络错误',
      content: errorMessage,
      showCancel: true,
      confirmText: '重试',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          // 用户选择重试
          setTimeout(() => this.performWechatLogin(), 1000)
        }
      }
    })
  },

  /**
   * 背景图片加载错误处理
   */
  onBgImageError(e) {
    console.error('背景图片加载失败:', e.detail)
    // 可以设置备用背景色或其他处理
    wx.showToast({
      title: '背景图片加载失败',
      icon: 'none',
      duration: 2000
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})